package com.yaorange.nongjt.certificate.service.impl;

import java.util.List;

import com.yaorange.nongjt.common.constant.NjtConstants;
import com.yaorange.nongjt.common.enums.YesOrNoEnum;
import com.yaorange.nongjt.common.exception.ServiceException;
import com.yaorange.nongjt.common.utils.DateUtils;
import com.yaorange.nongjt.common.utils.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yaorange.nongjt.certificate.mapper.NjtSerialAuthMapper;
import com.yaorange.nongjt.certificate.domain.NjtSerialAuth;
import com.yaorange.nongjt.certificate.service.INjtSerialAuthService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 打印机序列号认证情况Service业务层处理
 *
 * @author coach tam
 * @date 2024-10-18
 */
@Service
public class NjtSerialAuthServiceImpl implements INjtSerialAuthService
{
    @Autowired
    private NjtSerialAuthMapper njtSerialAuthMapper;

    /**
     * 查询打印机序列号认证情况
     *
     * @param id 打印机序列号认证情况主键
     * @return 打印机序列号认证情况
     */
    @Override
    public NjtSerialAuth selectNjtSerialAuthById(Long id)
    {
        return njtSerialAuthMapper.selectNjtSerialAuthById(id);
    }

    /**
     * 查询打印机序列号认证情况列表
     *
     * @param njtSerialAuth 打印机序列号认证情况
     * @return 打印机序列号认证情况
     */
    @Override
    public List<NjtSerialAuth> selectNjtSerialAuthList(NjtSerialAuth njtSerialAuth)
    {
        return njtSerialAuthMapper.selectNjtSerialAuthList(njtSerialAuth);
    }

    /**
     * 新增打印机序列号认证情况
     *
     * @param njtSerialAuth 打印机序列号认证情况
     * @return 结果
     */
    @Override
    public int insertNjtSerialAuth(NjtSerialAuth njtSerialAuth)
    {
        njtSerialAuth.setCreateTime(DateUtils.getNowDate());
        return njtSerialAuthMapper.insertNjtSerialAuth(njtSerialAuth);
    }

    /**
     * 修改打印机序列号认证情况
     *
     * @param njtSerialAuth 打印机序列号认证情况
     * @return 结果
     */
    @Override
    public int updateNjtSerialAuth(NjtSerialAuth njtSerialAuth)
    {
        njtSerialAuth.setUpdateTime(DateUtils.getNowDate());
        return njtSerialAuthMapper.updateNjtSerialAuth(njtSerialAuth);
    }

    /**
     * 批量删除打印机序列号认证情况
     *
     * @param ids 需要删除的打印机序列号认证情况主键
     * @return 结果
     */
    @Override
    public int deleteNjtSerialAuthByIds(Long[] ids)
    {
        return njtSerialAuthMapper.deleteNjtSerialAuthByIds(ids);
    }

    /**
     * 删除打印机序列号认证情况信息
     *
     * @param id 打印机序列号认证情况主键
     * @return 结果
     */
    @Override
    public int deleteNjtSerialAuthById(Long id)
    {
        return njtSerialAuthMapper.deleteNjtSerialAuthById(id);
    }

    @Override
    @Transactional(readOnly = true)
    public void checkSerialCode(String serialCode) {
        NjtSerialAuth njtSerialAuth = njtSerialAuthMapper.selectNjtSerialAuthBySerialCode(serialCode);
        if(njtSerialAuth == null){
            throw new ServiceException("未查询到该序列号信息");
        }
        //校验序列号状态
        if (YesOrNoEnum.NO.CODE == njtSerialAuth.getStatus()) {
            throw new ServiceException("该序列号已被禁用");
        }
        //校验认证状态
        if (YesOrNoEnum.NO.CODE == Integer.parseInt(njtSerialAuth.getAuthStatus())) {
            throw new ServiceException("该序列号已被禁用");
        }
        //校验是否属于当前用户
        if(!SecurityUtils.getUserId().equals(njtSerialAuth.getUserId())){
            throw new ServiceException("该序列号已被其他用户认证");
        }
    }
}
